//package com.fzkj.algorithm;
//
//import javax.swing.tree.TreeNode;
//import java.util.*;
//
public class RightSideView {
//    /**
//     *
//     给定一棵二叉树，想象自己站在它的右侧，按照从顶部到底部的顺序，返回从右侧所能看到的节点值。
//
//     输入: [1,2,3,null,5,null,4]
//     输出: [1, 3, 4]
//     解释:
//
//        1            <---
//      /   \
//     2     3         <---
//      \     \
//       5     4       <---
//     */
//
//    public List<Integer> rightSideView(TreeNode root) {
//        Map<Integer, Integer> rightmostValueAtDepth = new HashMap<Integer, Integer>();
//        int max_depth = -1;
//
//        Queue<TreeNode> nodeQueue = new LinkedList<TreeNode>();
//        Queue<Integer> depthQueue = new LinkedList<Integer>();
//        nodeQueue.add(root);
//        depthQueue.add(0);
//
//        while (!nodeQueue.isEmpty()) {
//            TreeNode node = nodeQueue.remove();
//            int depth = depthQueue.remove();
//
//            if (node != null) {
//                // 维护二叉树的最大深度
//                max_depth = Math.max(max_depth, depth);
//
//                // 由于每一层最后一个访问到的节点才是我们要的答案，因此不断更新对应深度的信息即可
//                rightmostValueAtDepth.put(depth, node.val);
//
//                nodeQueue.add(node.left);
//                nodeQueue.add(node.right);
//                depthQueue.add(depth+1);
//                depthQueue.add(depth+1);
//            }
//        }
//
//        List<Integer> rightView = new ArrayList<Integer>();
//        for (int depth = 0; depth <= max_depth; depth++) {
//            rightView.add(rightmostValueAtDepth.get(depth));
//        }
//
//        return rightView;
//    }
}
